/**
* 
* 
*  
*====================================================
* 文件名称: AbstractBaseTag.java
* 修订记录：
* No    日期				作者(操作:具体内容)
* 1.    2009-6-24			Administrator(创建:创建文件)
*====================================================
* 类描述：(说明未实现或其它不应生成javadoc的内容)
* 
*/
package com.devframe.web.taglib;

import java.lang.reflect.Method;
import java.util.Map;

import javax.servlet.jsp.tagext.BodyTagSupport;

/**
 *<pre><b><font color="blue">AbstractBaseTag</font></b></pre>
 *
 *<pre><b>&nbsp;--标签基类--</b></pre>
 * <pre></pre>
 * <pre>
 * <b>--样例--</b>
 *   AbstractBaseTag obj = new AbstractBaseTag();
 *   obj.method();
 * </pre>
 * JDK版本：JDK1.4
 * @author  <b>Administrator</b> 
 */
public abstract class AbstractBaseTag extends BodyTagSupport {
    /**
     * input标签的其他属性
     */
    private String style;
    /**
     * onclick事件
     */
    private String onclick;
    private String attr;
    /**
     * 获取对象属性值，可以支持object,也可以支持Map方式获取
     * 
     * @param property property 如果属性名含有点号则嵌套查找属性
     * @param object object
     * @return Object
     * 
     */
    protected static Object getPropertyValue(String property, Object object) {
        //如果属性名含有点号则嵌套查找属性
        if(property.indexOf(".")>0){
            String pName = property.substring(property.indexOf(".")+1);
            Object obj = getPropertyValue(property.substring(0,property.indexOf(".")),object);
            return getPropertyValue(pName,obj);
        }
        if (object instanceof Map) {
            return ((Map) object).get(property);
        }
        Object fieldValue = null;
        try {
            String methodName = "get"+property.substring(0, 1).toUpperCase()+property.substring(1);
            Method method = object.getClass().getMethod(methodName, new Class[0]);
            
            /*PropertyDescriptor pd = new PropertyDescriptor(property, object.getClass());
            Method getMethod = pd.getReadMethod();// 取出当字段的get方法.
            fieldValue = getMethod.invoke(object, new Object[0]);*/
            fieldValue = method.invoke(object, new Object[0]);
        } /*catch (IntrospectionException e1) {
            e1.printStackTrace();
        } */catch (Exception e) {
            e.printStackTrace();
        }
        return fieldValue;
    }
    
    /**
     * findAttribute
     * 嵌套查找上下文属性
     * @param name 属性名，可以用.号嵌套
     * @return 属性值
     * 
     */
    protected Object findAttribute(String name){
        Object attr = pageContext.findAttribute(name);
        if(attr==null && name.indexOf(".")>0){
            Object obj = pageContext.findAttribute(name.substring(0, name.indexOf(".")));
            String attrName = name.substring(name.indexOf(".")+1);
            if(obj!=null){
                attr = getPropertyValue(attrName,obj);
            }
        }
        return attr;
    }

    public String getStyle() {
        return style;
    }

    public void setStyle(String style) {
        this.style = style;
    }

    public String getOnclick() {
        return onclick;
    }

    public void setOnclick(String onclick) {
        this.onclick = onclick;
    }
    public String getAttr() {
        return attr;
    }

    public void setAttr(String attribStr) {
        this.attr = attribStr;
    }    
}
